import { Dayjs } from "dayjs";

export interface TruckOrderBox {
    obId?: number;
    boxCode?: string;
    orderCode?: string;
    boxUnit?: string|null;
    boxWeight?: number|null;
    boxWeightUnit?: string;
    boxQuantity?: number|null;
    boxVolWeight?: number|null;
    boxLengthUnit?: string;
    boxLength?: number|null;
    boxWidth?: number|null;
    boxHeight?: number|null;
    boxDescription?: string;
}

export interface TruckOrderAddress {
    oaId?: number;
    orderCode?: string;
    oaType?: string;
    oaFirstname?: string;
    oaLastname?: string;
    oaCompany?: string;
    oaCountry?: string;
    oaPostcode?: string;
    oaState?: string;
    oaCity?: string;
    oaStreetAddress1?: string;
    oaStreetAddress2?: string;
    oaUnit?: string;
    oaTelphone?: string;
    oaTelphoneExtension?: string;
    oaEmail?: string;
    accessorials?: string;
    accessorialsArray?: string[]; 
    referenceNo?: string;
    note?: string;
   
    openTime?: string;
    closeTime?: string;
     //发货准备相关时间
    pickReadyDatetime?: string;
    //收货相关
    deliverWindowType?: string;
    deliverTelphone?: string;
    deliverEmail?: string;
}

export interface TruckOrderRate {
    obId?: number;
    rateId?: string;
    creditsApplied?: number;
    estimatedPickupDate?: string;
    estimatedDeliveryDate?: string;
    price?: number;
    provider?: string;
    providerScac?: string;
    services?: string;
    transitDaysMinimum?: number;
    transitDaysMaximum?: number;
    truckEquipment?: string;
    truckSpecialty?: string;
    warnings?: string;
}

// 预查询数据结构
export interface TruckPreOrder {
    productCode?: string;
    referenceNo?: string;
    shipperAddressDT?: string;
    deliveryAddressDT?: string;
    pickReadyDatetime?: string;
    shipperAddress?: TruckOrderAddress;
    deliveryAddress?: TruckOrderAddress;
    boxs: TruckOrderBox[];
    quote?: RateDto;
}

export interface StatusEnum {
  value: string;
  label: string;
}

export interface TruckOrderCancelVo {
  orderCode: string;  
  cancelReason?: string;
}
export interface TruckOrderQueryVo {
 customerCode: string;  
  //​ 订单编号（用户ID+日期时间+编码） */
  orderCode: string;  
  //​ 客户参考号 */
  referenceNo: string;  
  //​ 订单状态 */
  orderStatus: number;  
  //​ 运单号 */
  trackingNumber: string;  
  //​ 商品编号 */
  productCode: string;  
  ///​ 供应商编码 */
  spCode: string;  
  //​ 订单创建时间范围 */
  beginCreateTime: Dayjs | string;
  endCreateTime: Dayjs | string;
  current: number;
  pageSize:number;
}

//订单信息
export interface TruckOrderVo {
    orderId?: number;
    orderCode?: string;
    referenceNo?: string;
    customerId?: number;
    customerCode?: string;
    productCode?: string;
    spCode?: string;
    orderType?: number;
    createType?: string;
    countryCode?: string;
    shippingFeeEstimate?: number;
    currencyCode?: string;
    totalQuantity?: number;
    totalWeight?: number;
    orderStatus?: number;
    interceptStatus?: number;
    trackingNumber?: string;
    logisticsStatus?: number;
    trackingUrl?: string;
    earliestPickupDate?: string;
    estimatedDeliveryDate?: string;
    orderChargeStatus?: number;
    isUploadExpress?: number;
    isAnewExpress?: number;
    syncServiceStatus?: number;
    syncCount?: number;
    cancelTime?: string;
    logisticsTime?: string;
    orderPaydate?: string;
    remark?: string;
    operatorNote?: string;
    logisticsErr?: string;
    syncInfo?: string;
    billStatus?: number;
    printLabel?: number;
    labelFormat?: string;
    createTime?:number;
    updateTime?:number;
    pickUpCountry?:string;
   pickUpPostcode?:string;
   deliveryCountry?:string;
   deliveryPostCode?:string;
}


export interface OrderAddressVo {
  /** 地址记录ID */
  oaId?: number;  
  /** 订单编号（格式：客户编码_订单ID） */
  orderCode?: string;  
  /** 地址类型：0-发货方 1-收货方 */
  oaType?: '0' | '1';  
  /** 收件人名 */
  oaFirstname?: string;  
  /** 收件人姓 */
  oaLastname?: string;  
  /** 公司名称 */
  oaCompany?: string;  
  /** 国家代码（默认US） */
  oaCountry?: string;  
  /** 邮政编码 */
  oaPostcode?: string;  
  /** 州/省 */
  oaState?: string;  
  /** 城市 */
  oaCity?: string;  
  /** 街道地址第一行 */
  oaStreetAddress1?: string;  
  /** 街道地址第二行 */
  oaStreetAddress2?: string;  
  /** 单元/门牌号 */
  oaUnit?: string;  
  /** 联系电话（含国际区号） */
  oaTelphone?: string;  
  /** 电话分机号 */
  oaTelphoneExtension?: string;  
  /** 电子邮箱 */
  oaEmail?: string;  
  /** 特殊要求（JSON格式存储） */
  accessorials?: string;
    /** 客户参考号 */
  referenceNo?: string;  
  /** 备注信息 */
  note?: string;  
  /** 营业开始时间（HHmm格式） */
  openTime?: string;  
  /** 营业结束时间（HHmm格式） */
  closeTime?: string;  
  /** 货物准备完成时间 */
  pickReadyDatetime?: string ;  
  /** 提货窗口类型：0-无 1-需收货人确认 2-需其他方式确认 */
  deliverWindowType?: '0' | '1' | '2';  
  /** 提货联系电话（用于短信通知） */
  deliverTelphone?: string;  
  /** 提货联系邮箱 */
  deliverEmail?: string;
}

export interface BoxInfoVo {
  // 主键ID
  obId?: number;
  // 箱子编号
  boxCode?: string;
  // 关联订单编号
  orderCode?: string;
  // 单位（箱/板/桶等）
  boxUnit?: string;
  // 计费重量（经过与体积重对比）
  boxWeight?: number;
  // 重量单位：lbs/kg , 目前默认为lbs
  boxWeightUnit?: string;
  // 箱子数量
  boxQuantity?: number;
  // 体积重
  boxVolWeight?: number;
  // 长度单位：inches/cm，目前默认inches
  boxLengthUnit?: string;
  // 长度（单位cm）
  boxLength?: number;
  // 宽度（单位cm）
  boxWidth?: number;
  // 高度（单位cm）
  boxHeight?: number;
  // 箱子描述
  boxDescription?: string;
}

/**
 * 订单操作日志接口
 */
export interface TruckOrderLogVO {
  /** 日志ID */
  olId: number;
  /** 操作类型：add/edit/submit/change/out/other */
  opType: string;
  /** 操作类型描述（前端展示用） */
  opTypeDesc: string;
  /** 订单编号 */
  orderCode: string;
  /** 变更类型：0-状态 1-内容 */
  olType: 0 | 1| 2;
  /** 变更类型描述 */
  olTypeDesc: string;
  /** 变更前状态 */
  orderStatusFrom: number;
  /** 变更前状态描述 */
  orderStatusFromDesc: string;
  /** 变更后状态 */
  orderStatusTo: number;
  /** 变更后状态描述 */
  orderStatusToDesc: string;
  // 操作描述
  olComments: string;
  /** 创建时间 */
  createTime: number;
  userName: string;
}
// 可选枚举
export enum OperationType {
  ADD = 'add',
  EDIT = 'edit',
  SUBMIT = 'submit',
  CHANGE = 'change',
  OUT = 'out',
  OTHER = 'other'
}
export enum ChangeType {
  STATUS = 0,
  CONTENT = 1
}

export interface TruckOrderFeeDetailVO {
  /** 费用明细ID */
  ofdId: number;
  /** 订单编号 */
  orderCode: string;
  /** 运单号 */
  trackingNumber: string;
  /** 物流跟踪URL */
   customerCode : string;
    productCode : string;
    spCode : string;
    referenceNo : string;
  /** 费用代码 */
  ftCode: string;
  /** 费用类型名称 */
  ftName: string;
  /** 原始金额 */
  ofdAmount: number;
  /** 费用备注 */
  ofdNote: string;
  /** 操作用户ID */
  userId: number;
  /** 操作用户姓名 */
  userName: string;
  /** 系统备注 */
  ofdSysNote: string;
  /** 发生时间 */
  createTime: number;
  /** 更新时间 */
  updateTime: number;
  /** 币种代码 */
  currencyCode: string;
}

/**
 * 订单物流轨迹接口
 */
export interface TruckOrderTrackVO {
  /** 轨迹ID */
  otId: number;
  /** 订单编号 */
  orderCode: string;
  /** 所在城市 */
  city: string;
  /** 州/省 */
  state: string;
  /** 下一站名称 */
  deliveryLocationName: string;
  /** 上一站来源 */
  pickupLocationName: string;
  /** 物流事件类型 */
  eventType: string;
  /** 物流事件类型描述 */
  eventTypeDesc: string;
  /** 物流参考号 */
  shipmentReferenceNumber: string;
  /** 物流编号 */
  proNumber: string;
  /** 物流状态描述 */
  status: string;
  /** 物流时间 */
  timestamp: string;
}

/**
 * 订单提单接口
 */
export interface TruckOrderBolVO {
  /** 轨迹ID */
  id?: string;
  /** 订单编号 */
  orderCode?: string;
  /** 物流状态事件、类型 */
  type?: string;
  /** 实际标签路径 */
  olPath?: string;
  //文件访问地址
  olPathUrl?:string;
  /** 实际标签文件类型 */
  olFileType?: string;
  /** 实际标签文件的唯一标识（md5） */
  olFileLength?: number;
  /** 处理状态：0-未处理 1-已处理 2-处理异常 */
  olStatus?: number;
  /** 备注/错误信息 */
  olNote?: string;
}

export interface RateDto {
  quoteId: string;
  id: string;
  coveragePrice: number;
  coveredValue: number;
  creditsApplied: number;
  estimatedPickupDate: Date | string;
  estimatedDeliveryDate: Date | string;
  price: number;
  provider: string;
  providerScac: string;
  services: string[];
  serviceType: string;
  transitDays: TransitDays;
  truck: Truck;
  warnings: string[];
}

interface TransitDays {
  minimum: number;
  maximum: number;
}

interface Truck {
  equipment: string;
  specialty: string;
}


